{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你的等级是: B\n"
     ]
    }
   ],
   "source": [
    "def determine_grade(score):\n",
    "    if score >= 90:\n",
    "        return 'A'\n",
    "    elif score >= 80:\n",
    "        return 'B'\n",
    "    elif score >= 70:\n",
    "        return 'C'\n",
    "    elif score >= 60:\n",
    "        return 'D'\n",
    "    else:\n",
    "        return 'F'\n",
    "\n",
    "def main():\n",
    "    try:\n",
    "        score = float(input(\"请输入成绩（0-100）: \"))\n",
    "        if not 0 <= score <= 100:\n",
    "            print(\"成绩必须在0到100之间。\")\n",
    "        else:\n",
    "            grade = determine_grade(score)\n",
    "            print(f\"你的等级是: {grade}\")\n",
    "    except ValueError:\n",
    "        print(\"请输入一个有效的数字。\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=!pip list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy             2.1.3\n",
      "matplotlib        3.9.2\n",
      "matplotlib-inline 0.1.7\n"
     ]
    }
   ],
   "source": [
    "for item in a:\n",
    "    if 'numpy' in item:\n",
    "        print(item)\n",
    "for item in a:\n",
    "    if 'matplotlib' in item:\n",
    "        print(item)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x19f7f968e10>,\n",
       " <matplotlib.lines.Line2D at 0x19f7f968f50>]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(0,4*np.pi)\n",
    "a=1\n",
    "plt.plot(x,np.sin(x+np.pi/4),x,np.cos(x+np.pi/4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'graphviz'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[21], line 3\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;124;03m''' import graphviz as viz\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \u001b[38;5;124;03mviz.Digraph() '''\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mgraphviz\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Digraph\n\u001b[0;32m      4\u001b[0m dot\u001b[38;5;241m=\u001b[39mDigraph()\n\u001b[0;32m      5\u001b[0m dot\u001b[38;5;241m.\u001b[39mnode(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m1\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstart\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'graphviz'"
     ]
    }
   ],
   "source": [
    "''' import graphviz as viz\n",
    "viz.Digraph() '''\n",
    "from graphviz import Digraph\n",
    "dot = Digraph()\n",
    "dot.node('1','start')\n",
    "dot.node('2','end')\n",
    "dot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax. Perhaps you forgot a comma? (1138581145.py, line 34)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;36m  Cell \u001b[1;32mIn[17], line 34\u001b[1;36m\u001b[0m\n\u001b[1;33m    dot.render('flowchart',format='png'cleanup=ture)\u001b[0m\n\u001b[1;37m                                  ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax. Perhaps you forgot a comma?\n"
     ]
    }
   ],
   "source": [
    "from graphviz import Digraph\n",
    "\n",
    "# 创建一个有向图对象\n",
    "dot = Digraph(comment='Python Nested Loop Program')\n",
    "\n",
    "# 添加节点\n",
    "dot.node('A','开始')\n",
    "dot.node('B','初始化L=[];a=[1,2,3,4]')\n",
    "dot.node('C','for val_1 in a')\n",
    "dot.node('D','for val_2 in a')\n",
    "dot.node('E','for val_3 in a')\n",
    "dot.node('F','if val_1 == val_2 or val_1 == val_3 or val_2 == val_3')\n",
    "dot.node('G','continue')\n",
    "dot.node('H','L.append(str(val_1)+str(val_2)+str(val_3))')\n",
    "dot.node('I','打印len(L)和L')\n",
    "dot.node('J','结束')\n",
    "\n",
    "# 添加边\n",
    "dot.edge('A','B')\n",
    "dot.edge('B','C')\n",
    "dot.edge('C','D')\n",
    "dot.edge('D','E')\n",
    "dot.edge('E','F')\n",
    "dot.edge('F','G',label='是',xlabel='True')\n",
    "dot.edge('G','E')\n",
    "dot.edge('F','H',label='否',xlabel='False')\n",
    "dot.edge('H','E')\n",
    "dot.edge('E','D')\n",
    "dot.edge('D','C')\n",
    "dot.edge('C','I')\n",
    "dot.edge('I','J')\n",
    "\n",
    "# 将图导出为文件\n",
    "dot.render('flowchart',format='png'cleanup=ture)\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 7.0.1 (20221109.1506)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"208pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 208.12 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 204.12,-472 204.12,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-468 73.06,-468 73.06,-432 127.06,-432 127.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-446.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"200.18,-396 40.91,-396 -0.06,-360 159.21,-360 200.18,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-374.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-431.7C100.06,-424.41 100.06,-415.73 100.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-407.62 100.06,-397.62 96.56,-407.62 103.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"143.06,-324 57.06,-324 57.06,-288 143.06,-288 143.06,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-302.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-359.7C100.06,-352.41 100.06,-343.73 100.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-335.62 100.06,-325.62 96.56,-335.62 103.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"152.56,-252 47.56,-252 47.56,-216 152.56,-216 152.56,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-230.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-287.7C100.06,-280.41 100.06,-271.73 100.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-263.62 100.06,-253.62 96.56,-263.62 103.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"165.56,-180 34.56,-180 34.56,-144 165.56,-144 165.56,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-158.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-215.7C100.06,-208.41 100.06,-199.73 100.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-191.62 100.06,-181.62 96.56,-191.62 103.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-108 73.06,-108 73.06,-72 127.06,-72 127.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-86.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-143.7C100.06,-136.41 100.06,-127.73 100.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-119.62 100.06,-109.62 96.56,-119.62 103.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-36 73.06,-36 73.06,0 127.06,0 127.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-71.7C100.06,-64.41 100.06,-55.73 100.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-47.62 100.06,-37.62 96.56,-47.62 103.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x20baea4e410>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'graphviz' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\VSWork\\Pythonwork\\0001\\第二_课程序设计基础.ipynb Cell 19\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m dot\u001b[39m=\u001b[39mgraphviz\u001b[39m.\u001b[39mDigraph(comment\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mthe round table\u001b[39m\u001b[39m'\u001b[39m,name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m分支结构\u001b[39m\u001b[39m\"\u001b[39m,node_attr\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mbox\u001b[39m\u001b[39m'\u001b[39m})\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m1\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m开始\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m2\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m输入Real Number =?\u001b[39m\u001b[39m'\u001b[39m,shape\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mparallelogram\u001b[39m\u001b[39m'\u001b[39m)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'graphviz' is not defined"
     ]
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//fdd.jpg\" width=\"150 \" alt=\"肥嘟嘟左卫门\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                 ` .`..                                                         \n",
      "                  ?b< .                                                         \n",
      "               . 'pwZq.                                                         \n",
      "               ../q-~mp.' .                                 ....                \n",
      "               .'dz++-wZ^..                                 '..'>+.             \n",
      "               .^w-++~_ww,..        ..         .         '`.)mqZZq`.            \n",
      "               .vq+++++?Jql ..              ..           /mmw|_[m\\.             \n",
      "               .wq+++++++jqZ'''`ivOZqwqmLc{!'..      'iwZp_~_+_mp'              \n",
      "               .bw__++++++?wwpqwpX)[][})tzQmqqwqu\"'.cZwj++++~_qa`.              \n",
      "              .`wu++_++++++_j]+++++++++_++++___]QdZqw-++++++-jZ\"                \n",
      "              '>q~]Qz?_+++++++___++++++++++++++_~-+-+~++++++)w~'                \n",
      "            ^^bw_)qwwmpv+++++++++++++++++++++++++++++-++<__{mr..                \n",
      "          `.)mq_~qwmwmmqww>+_++++++++++++++++++_+~~_Lwmqwp~~nwZ`                \n",
      "        . 'Xqk+_-qwmwwwmwwdd1__++++++++++++++__-|qppmwwqwww+~+pd..              \n",
      "          :Zm_]<-<-qwqqmwwwZqp}_+++++++++++_+tqqwmwwwwwwwmOq++]qp^              \n",
      "        ''pqi~+++++__<UbwqqwwwmX++++++++++~UOwwwwwwmwwmwwqpm_++<bL'.            \n",
      "        .;dw?++++++++++++-wdqmmp_+++++++++_XqwmwwwqqppZmq{_~++++|Z'.            \n",
      "        .qq}+_+++++__??~~_~_~JZ<++++++++++_-wdpqX)]]11_-~_+_+++++wL             \n",
      "         dm+++++++++pwqo_++++?__++++++++++++~++__cZqqpwp>++++++++vq'            \n",
      "        'pd_+++++++-mwwZ~+_+++++++++++++++++++++fqwwwwwqb_++++++~_q>            \n",
      "         hb++++++++[Uwd[<+++++++++++++++++++++++wqmwmmwwd__+++++__dL            \n",
      "        `wq~++++++++?+++++++++++++++++++++++++++wwwwwwwOJ+++++++__qw            \n",
      "        .fd+++++++_+_1Q00v1+-____+++++++++++_++__Cdwqqqr~+++++++__wm            \n",
      "        .;q++++_+_1mdq/(\\XmmqwQ[+_++++++++_+1cQqqLj-___+++++++++_+pt            \n",
      "         .wz_+?-<dq\\+++++++++-cwmX+__~--/dmwwv|[{tQwmpm[++_+++++_-w.            \n",
      "          Cp--_bwu_-_++++++++__++dZm|zmwq1+~++_+_~+_++fqdw}+++++-Ld             \n",
      "        . ^w0?pq~__+++_+++++++_+___Cp0-?+?_+~++++++++_+-+/mp+++++q}.            \n",
      "          ',wkw__++++++~+++++++++++++++++++++++++++++++++_+wC?++Ym.'            \n",
      "            ~qr++++++?dwZdw[+-+++++++++++++++++++++++++++++vp~_>wf              \n",
      "            qw__+++++ZOzzcvmw+++++++++++++++_-_+(~_+-++++++~Z-_dd'.. ..         \n",
      "            qp_++++?+pzzzzzXq[+++++++++++++++<mqwpd+?++++++~p[wZ;Cqw.' .        \n",
      "            rw~++++__wvzzzzcw++++++++++++++++fqvcuq)?++++++_mpqprpjh,'..        \n",
      "            'p0_?++++{dzczXZq-+++++++++++++++~pqUOw+++++_+-(dLfjjZ0d..          \n",
      "            `;pX-+++++_wwwwc_+++++++++++++++++~wZ|~_++++++~vmvppr.`^.           \n",
      "            .Lwwk++++++_?_<++++++++++++++++++++__+++++++++_Z0wQ,.               \n",
      "            mO<>qmO__+++++++__--vppqqwqO}+]+++++_+++_++++[wb++qz                \n",
      "           iw[]_(bbZppz]_+<?/mpqp-`.'`~JwmZbC]_+_-<+++_1wmqqJ-Lq'.              \n",
      "           Cpjwwq]..^_Zpqqmwmx'  '''. . ` 'iLZwdwqwqqwww\\..'qpwL '              \n",
      "           'Om{`'..  ..... ...               '. .'...'..      ..                \n",
      "             . .  .          .               ..         .                       \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n",
      "                                                                                \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\L\\AppData\\Local\\Temp\\ipykernel_38684\\1864857181.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 80\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "pic=plt.imread('fdd.jpg')\n",
    "pic = plt.imread(\".\\\\fdd.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
